package com.tanhua.dubbo.server.api;

import com.tanhua.dubbo.server.enums.CommentPublishIdType;
import com.tanhua.dubbo.server.enums.CommentType;
import com.tanhua.dubbo.server.pojo.Comment;
import com.tanhua.dubbo.server.pojo.Publish;
import org.bson.types.ObjectId;

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 *
 * @ClassName: QuanZiApi
 * @Author:王晨晗
 * @Description: 圈子接口
 * @Date: 2021/12/30/21:55
 */
public interface QuanZiApi {
    /**
     * @description 查询好友动态信息
     * @param userId 当前用户的id
     * @param page
     * @param pagesize
     * @updateTime 2021/12/30 21:57
     */
    List<Publish> queryPublishList(long userId , Integer page , Integer pagesize , List<Object> collectId);

    /**
     * @description 根据用户id查询其时间线表的好友id
     * @param userId
     * @param page
     * @param pagesize
     * @updateTime 2021/12/30 22:04
     */
    List<Object> queryTimeLine(long userId, Integer page, Integer pagesize);

    /**
     * @description 根据用户id 获取推荐动态
     * @param userId
     * @param page
     * @param pagesize
     * @updateTime 2021/12/30 23:15
     * @return: java.util.List<com.tanhua.dubbo.server.pojo.Publish>
     */
    List<Publish> queryRecommendPublishList(long userId , Integer page , Integer pagesize);

    /**
     * @description 保存发布动态的信息
     * @param publish
     * @updateTime 2021/12/31 10:27
     * @return: java.lang.String
     */
    String savePublish(Publish publish);

    /**
     * @description 根据id获取动态信息
     * @param id
     * @return
     */
    Publish queryPublishById(String id);

    /**
     * @description  动态取消点赞或喜欢功能
     * @param userId
     * @param publishId
     * @param commentType
     * @return
     */
    Boolean disLikeOrLove(Long userId , String publishId , CommentType commentType);

    /**
     * @description 查询点赞/喜欢数/评论数
     * @param publishId 此处id不一定是动态的id,也可能是动态下评论的id或者小视频的id
     * @param commentType 评论类型
     * @return
     */
    Long queryCount(String publishId, CommentType commentType);

    /**
     * @description 判断用户对该动态是否喜欢/点赞
     * @param userId
     * @param publishId
     * @param commentType
     * @return
     */
    Boolean queryUserIf(Long userId , String publishId , CommentType commentType);

    /**
     * @description 查询评论列表
     * @param publishId
     * @param page
     * @param pagesize
     * @return
     */
    List<Comment> queryCommentList(String publishId , Integer page , Integer pagesize);


    /**
     * @description  动态/视频的点赞或喜欢功能
     * @param userId    当前用户id
     * @param publishId     被点赞/喜欢的动态视频的id
     * @param commentType   评论类型:喜欢 / 点赞
     * @param commentPublishIdType  是对动态的点赞还是视频还是评论的点赞
     * @return
     */
    Boolean likeOrLoveComment(Long userId, String publishId, CommentType commentType , CommentPublishIdType commentPublishIdType);

    /**
     * @description 发表评论
     * @param userId        评论者id
     * @param publishId     被评论的动态/视频的id
     * @param content       评论内容
     * @param commentPublishIdType     所评论的类型(即是视频还是动态的评论)
     * @return
     */
    Boolean saveComment(Long userId , String publishId , String content , CommentPublishIdType commentPublishIdType);

    /**
     * @description 查询对我的喜欢/点赞/评论列表
     * @param userId    当前用户id
     * @param page      当前页
     * @param pageSize  每页条数
     * @param commentType  查询的评论类型
     * @return
     */
    List<Comment> queryCommentListByUser(Long userId , Integer page , Integer pageSize , CommentType commentType);

    /**
     * @description 查询相册表,获取动态信息
     * @param userId  用户id
     * @param page
     * @param pageSize
     * @return
     */
    List<Publish> queryAlbumList(Long userId , Integer page , Integer pageSize);

    /**
     *  根据pid查询数据
     * @param id
     * @return
     */
    Publish queryPublishByPId(String id);

    /**
     *  修改点赞数
     * @param likeCount
     */
    void updatePublishLikeCount(Integer likeCount, ObjectId publishId);

    /**
     *  修改评论数
     * @param commentCount
     */
    void updateCommentCount(Integer commentCount,ObjectId publishId);
}
